`
https://leetcode.cn/problems/find-all-duplicates-in-an-array/
`

/**
 * @param {number[]} nums
 * @return {number[]}
 */
var findDuplicates = function (nums) {
  // 由于 nums 的数都位于 [1, n]，所以可以把 nums 本身作为哈希表记录元素是否出现
  // 由于 nums 中的元素都是正数，所以我们可以用负数来标记某个元素已经出现过
  let res = [];
  for (let num of nums) {
    // 注意索引，nums 中元素大小从 1 开始，
    // 而索引是从 0 开始的，所以有一位索引偏移
    if (nums[Math.abs(num) - 1] < 0) {
      // 之前已经把对应索引的元素变成负数了，
      // 这说明 num 重复出现了两次
      res.push(Math.abs(num));
    } else {
      // 把索引 num - 1 置为负数
      nums[Math.abs(num) - 1] *= -1;
    }
  }

  return res;
};